package jschool.ui.decoradores;

import javax.swing.AbstractButton;

import jschool.controladores.cliente.ControladorBotonesCliente;
import jschool.controladores.servidor.ControladorBotonesServidor;
import jschool.ui.imagenes.GestorImagen;
import jschool.ui.imagenes.IconoBoton;

public class DecoradorBoton {

	private static DecoradorBoton instancia;
	
	private ControladorBotonesCliente controladorBotonesCliente;
	private ControladorBotonesServidor controladorBotonesServidor;
	private GestorImagen gestorImagen;
	
	
	private DecoradorBoton() {
		
		controladorBotonesCliente = ControladorBotonesCliente.getInstancia();
		controladorBotonesServidor = ControladorBotonesServidor.getInstancia();
		gestorImagen = GestorImagen.getInstancia();

	}
	
	
	public static DecoradorBoton getInstancia() {
		
		if( instancia == null ) {
			instancia = new DecoradorBoton();
		}
		
		return instancia;
	}
	
	public void decorarBoton( AbstractButton boton, String texto, char mNemonic, IconoBoton icono ) {
		agregarTexto( boton, texto );
		agregarIcono( boton, icono );
		agregarMnemonic( boton, mNemonic );
	}
	
	
	public void decorarBoton( AbstractButton boton, String texto, char mNemonic,
			String comando, char tipo, IconoBoton icono ) {
		
		decorarBoton( boton, texto, mNemonic, icono );
		agregarActionCommand( boton, comando );
		agregarActionListener( boton, tipo );
	}
	
	
	public void decorarBoton( AbstractButton boton, String texto, char mNemonic,
			String comando, char tipo, IconoBoton icono, String etiqueta ) {
		
		decorarBoton( boton, texto, mNemonic, comando, tipo, icono );
		agregarEtiqueta( boton, etiqueta );
	}
	
	
	public void agregarIcono( AbstractButton boton, IconoBoton icono ) {
		
		
		switch( icono ) {
		
		case ENCENDER:
			
			boton.setIcon(  gestorImagen.getIconoBoton( 0 ) );
			boton.setRolloverIcon( gestorImagen.getIconoBoton( 1 )  );
			boton.setPressedIcon( gestorImagen.getIconoBoton( 2 ) );
			boton.setOpaque( false );
			break;
			
		}
	}
	
	
	
	public void agregarMnemonic( AbstractButton boton, char mNemonic ) {
		boton.setMnemonic( mNemonic );
	}
	
	
	public void agregarActionCommand( AbstractButton boton, String comando ) {
		boton.setActionCommand( comando );
	}
	
	public void agregarActionListener( AbstractButton boton, char tipo ) {
		
		switch( tipo ) {
		
		case 'C':
			boton.addActionListener( controladorBotonesCliente );
			break;
			
		case 'S':
			boton.addActionListener( controladorBotonesServidor );
			break;
		}
	}
	
	
	public void agregarEtiqueta( AbstractButton boton, String etiqueta ) {
		boton.setToolTipText( etiqueta );
	}
	
	
	public void agregarTexto( AbstractButton boton, String texto ) {
		boton.setText( texto );
	}
	
}
